home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / lib / partman / finish.d / 50fstab_removable_media_entries < prev    next >
Encoding:
Text File  |  2009-04-19  |  3.4 KB  |  144 lines

  1. #!/bin/sh
  2.  
  3. [ -f /target/etc/fstab ] || exit 0
  4.  
  5. MEDIA=/media # or MEDIA='' to make directories in /
  6.  
  7. escape () {
  8.     printf %s "$1" | \
  9.         sed 's/\\/\\134/g; s/ /\\040/g; s/    /\\011/g; s/\n/\\012/g'
  10. }
  11.  
  12. # dev, mountpoint, type, options, dump, pass
  13. addfstab () {
  14.     printf "%-15s %-15s %-7s %-15s %-7s %s\n" \
  15.         "$(escape "$1")" "$(escape "$2")" \
  16.         "$(escape "$3")" "$(escape "$4")" \
  17.         "$5" "$6" >> /target/etc/fstab
  18. }
  19.  
  20. rm_dir_or_link () {
  21.     if [ -L "$1" ]; then
  22.         rm "$1"
  23.     elif [ -d "$1" ]; then
  24.         rmdir "$1"
  25.     fi
  26. }
  27.  
  28. # category, file system, options, main device, other devices ...
  29. populate_media () {
  30.     local category fs options number mount_point
  31.     category=$1
  32.     fs=$2
  33.     options=$3
  34.     shift; shift; shift
  35.     mkdir -p /target$MEDIA
  36.     if [ "$1" ]; then
  37.         rm_dir_or_link /target${MEDIA}/${category}
  38.         ln -s ${category}0 /target${MEDIA}/${category}
  39.     fi
  40.     number=0
  41.     while [ "$1" ]; do
  42.         mount_point="${MEDIA}/${category}$number"
  43.         addfstab "$1" "$mount_point" "$fs" "$options" 0 0
  44.         rm_dir_or_link /target$mount_point
  45.         mkdir -p /target$mount_point
  46.         number=$(($number + 1))
  47.         shift
  48.     done
  49. }
  50.  
  51. CDDEV=$(grep /cdrom /proc/mounts | cut -d ' ' -f 1 | grep -v ^/dev/loop)
  52. if [ -n "$CDDEV" ]; then
  53.     MAPCDDEV=$(mapdevfs $CDDEV)
  54. else
  55.     MAPCDDEV=''
  56. fi
  57.  
  58. CDDEVICES=''
  59. for dev in $(list-devices cd); do
  60.     mapdev=$(mapdevfs $dev)
  61.     if [ -n "$mapdev" ] && [ "$mapdev" != "$MAPCDDEV" ]; then
  62.         CDDEVICES="$CDDEVICES $mapdev"
  63.     fi
  64. done
  65. if [ -n "$MAPCDDEV" ]; then
  66.     CDDEVICES="$MAPCDDEV $CDDEVICES" # first the mounted cdrom
  67. fi
  68.  
  69. populate_media cdrom udf,iso9660 user,noauto,exec,utf8 $CDDEVICES
  70. # Compatability link to keep things working; etch is not migrated away
  71. # entirely from /cdrom.
  72. if [ -n "$CDDEVICES" ]; then
  73.     rm_dir_or_link /target/cdrom
  74.     ln -s media/cdrom /target/cdrom
  75. fi
  76.  
  77. FDDEVICES=''
  78. for dev in $(list-devices floppy); do
  79.     mapdev=$(mapdevfs $dev)
  80.     if [ "$mapdev" ]; then
  81.         FDDEVICES="$FDDEVICES $mapdev"
  82.     fi
  83. done
  84.  
  85. populate_media floppy auto rw,user,noauto,exec,utf8 $FDDEVICES
  86.  
  87. # See if a usb storage device is plugged in right now. If so, assume it is
  88. # removable media unless the disk is already listed in the fstab.
  89. HD_MEDIA=$(grep /hd-media /proc/mounts | cut -d ' ' -f 1)
  90. if [ -n "$HD_MEDIA" ]; then
  91.     HD_MEDIA="$(mapdevfs $HD_MEDIA)"
  92. fi
  93. founddevs=
  94. if [ -d /sys/block ]; then
  95.     if type udevadm >/dev/null 2>&1; then
  96.         disk_containing () {
  97.             dirname "$(udevadm info -q path -n "$1")"
  98.         }
  99.         is_usb () {
  100.             udevadm info -q env -n "$1" | grep -q '^ID_BUS=usb$'
  101.         }
  102.     elif type udevinfo >/dev/null 2>&1; then
  103.         disk_containing () {
  104.             dirname "$(udevinfo -q path -n "$1")"
  105.         }
  106.         is_usb () {
  107.             udevinfo -q env -n "$1" | grep -q '^ID_BUS=usb$'
  108.         }
  109.     fi
  110. fi
  111. if type disk_containing >/dev/null 2>&1; then
  112.     partitions="$(list-devices partition)"
  113.     for dev in $partitions; do
  114.         is_usb "$dev" || continue
  115.         disk="$(disk_containing "$dev")"
  116.         for otherdev in $partitions; do
  117.             if [ "$(disk_containing "$otherdev")" = "$disk" ] && \
  118.                grep -q "^$otherdev " /target/etc/fstab; then
  119.                 continue 2
  120.             fi
  121.         done
  122.         mapdev="$(mapdevfs $dev)"
  123.         founddevs="${founddevs:+$founddevs }$mapdev"
  124.     done
  125. fi
  126. USBDEVICES=
  127. for dev in $founddevs; do
  128.     if [ -z "$USBDEVICES" ]; then
  129.         USBDEVICES="$dev"
  130.     else
  131.         if [ "$dev" != "$HD_MEDIA" ]; then
  132.             USBDEVICES="$USBDEVICES $dev"
  133.         else
  134.             # If installing from usb, list that device first
  135.             USBDEVICES="$dev $USBDEVICES"
  136.         fi
  137.     fi
  138. done
  139.  
  140. # See https://launchpad.net/bugs/60552
  141. if [ "$USBDEVICES" ]; then
  142.     logger -t partman-target "USB automounting disabled (would have handled: $USBDEVICES)"
  143. fi
  144.